package br.leiam.eolica.denis;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.UIManager;

import sun.misc.BASE64Decoder;
import br.leiam.eolica.excecoes.EolicaException;
import br.leiam.eolica.funcoes.ProducaoEnergia;
import br.leiam.eolica.graficos.Dados;
import br.leiam.eolica.graficos.Tabela;
import br.leiam.eolica.util.Logger;

public class Teste {

	/**
	 * @param args
	 * @throws EolicaException
	 */
	public static void main(String[] args) {

		// System.out.println(facade.getUsuario("arthur", "1234"));
		// String dataInicial = "2010-08-28 00:00:00";
		// String dataFinal = "2010-09-03 23:50:00";
		String dataInicial = "2011-03-01 00:00:00";
		String dataFinal = "2011-03-07 23:50:00";
		String estacao = "tac4";
		int altura = 100;
		String[] figuras = new String[3];

		String JDBC_DRIVER = "com.mysql.jdbc.Driver";
		String DATABASE_URL = "jdbc:mysql://localhost:3306/eolica";

		try {
			// producaoDeEnergia(dataInicial, dataFinal, JDBC_DRIVER,
			// DATABASE_URL);
			dadosProbabilisticos(estacao,dataInicial, dataFinal, altura, figuras,
					JDBC_DRIVER, DATABASE_URL);

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private static void dadosProbabilisticos(String estacao, String dataInicial,
			String dataFinal, int altura, String[] figuras, String JDBC_DRIVER,
			String DATABASE_URL) throws Exception, IOException {
		int imageWidth = 350;
		int imageHeight = 350;

		RosaDosVentosFrequencia RVFrequencia = new RosaDosVentosFrequencia(
				JDBC_DRIVER, DATABASE_URL, "root", "root", estacao, dataInicial,
				dataFinal, altura, imageWidth, imageHeight);
		RosaDosVentosVelocidades RVVelocidades = new RosaDosVentosVelocidades(
				JDBC_DRIVER, DATABASE_URL, "root", "root", estacao, dataInicial,
				dataFinal, altura, "FIXME", imageWidth, imageHeight);
		imageWidth = 480;
		imageHeight = 380;
//		Weibull weibull = new Weibull(JDBC_DRIVER, DATABASE_URL, "root",
//				"root", "tac1", dataInicial, dataFinal, altura, imageWidth,
//				imageHeight);
		
		/*Weibull weibull = new Weibull(JDBC_DRIVER, DATABASE_URL, "root",
				"root", "tac1", dataInicial, dataFinal, "s2a", 480, 380);*/


		Decodificar(RVFrequencia.getBase64String(), "RVFrequencia");
		Decodificar(RVVelocidades.getBase64String(), "RVVelocidades");
		//Decodificar(weibull.getBase64String(), "weibull");
	}

	private static void producaoDeEnergia(String dataInicial, String dataFinal,
			String JDBC_DRIVER, String DATABASE_URL) throws IOException,
			FileNotFoundException {

//		Weibull weibull = new Weibull(JDBC_DRIVER, DATABASE_URL, "root",
//				"root", "tac1", dataInicial, dataFinal, "s2a", 480, 380);
//		figuras[0] = weibull.getBase64String();
//		Decodificar(figuras, "Weibull");

		String altura = "s2a";

		int imageWidth = 450;
		int imageHeight = 450;
		Frequencia gFrequencia = new Frequencia(JDBC_DRIVER, DATABASE_URL,
				"root", "root", "tac1", dataInicial, dataFinal, altura,
				imageWidth, imageHeight);
		CurvaAerogerador curvaAerogerador = new CurvaAerogerador(JDBC_DRIVER,
				DATABASE_URL, "root", "root", "tac1", dataInicial, dataFinal,
				"70", imageWidth, imageHeight);
		ProducaoEnergia calculoEAG = new ProducaoEnergia();
		calculoEAG.setCurvaPotencia(curvaAerogerador.getPotencia());
		calculoEAG.setFreqRelativa(gFrequencia.getFrequenciaRelativa());
		calculoEAG.calcularEAG();
		/*
		 * TabelaProdEnergia modeloTabela = new TabelaProdEnergia(
		 * gFrequencia.getVelocidadeVentoMedio(),
		 * gFrequencia.getFrequenciaRelativa(), curvaAerogerador.getPotencia(),
		 * calculoEAG.getFvpv());
		 */
		/*
		 * ResultadoProdEnergia prodEnergia = new
		 * ResultadoProdEnergia(modeloTabela);
		 * prodEnergia.setRodape((calculoEAG.getSumfvpv()));
		 * prodEnergia.setLabelEAG(calculoEAG.getEAG() / 1000);
		 */

		Dados dados = new Dados(gFrequencia.getVelocidadeVentoMedio(),
				gFrequencia.getFrequenciaRelativa(),
				curvaAerogerador.getPotencia(), calculoEAG.getFvpv(),
				calculoEAG.getSumfvpv(), calculoEAG.getEAG());
		String prodEnergia = "";
		//prodEnergia = getProdEnergia(dados, prodEnergia);

		Decodificar(gFrequencia.getBase64String(), "gFrequencia");
		Decodificar(curvaAerogerador.getBase64String(), "curvaAerogerador");
		Decodificar(prodEnergia, "prodEnergia");
	}

	/*private static String getProdEnergia(Dados dados, String prodEnergia) {
		try {
			UIManager.setLookAndFeel(UIManager
					.getCrossPlatformLookAndFeelClassName());
			JFrame frame = new JFrame("Frame");

			Tabela painel = new Tabela(dados);

			frame.getContentPane().add(painel);
			frame.pack();
			prodEnergia = painel.getBase64String();
			frame.setVisible(false);
			frame.dispose();
			frame = null;
		} catch (Exception e) {

		}
		return prodEnergia;
	}*/

	private static void Decodificar(String[] figuras, String nomeGrafico)
			throws IOException, FileNotFoundException {
		for (int i = 0; i < figuras.length; i++) {
			BASE64Decoder decoder = new BASE64Decoder();
			byte[] figurasDecodificadas = null;
			try {
				figurasDecodificadas = decoder.decodeBuffer(figuras[i]);
				String nomeArquivo = "./figuras/GraficoDenis_" + nomeGrafico
						+ String.valueOf(figuras.length) + String.valueOf(i)
						+ ".png";
				FileOutputStream outputFile = new FileOutputStream(nomeArquivo);

				outputFile.write(figurasDecodificadas);
				outputFile.flush();
				outputFile.close();
				Logger.getInstance().log("Grafico criado: " + nomeArquivo);
			} catch (NullPointerException e) {

			}
		}
	}

	private static void Decodificar(String figura, String nomeGrafico)
			throws IOException, FileNotFoundException {

		BASE64Decoder decoder = new BASE64Decoder();
		byte[] figurasDecodificadas = null;
		try {
			figurasDecodificadas = decoder.decodeBuffer(figura);
			String nomeArquivo = "./figuras/GraficoDenis_" + nomeGrafico
					+ ".png";
			FileOutputStream outputFile = new FileOutputStream(nomeArquivo);

			outputFile.write(figurasDecodificadas);
			outputFile.flush();
			outputFile.close();
			Logger.getInstance().log("Grafico criado: " + nomeArquivo);
		} catch (NullPointerException e) {

		}
	}

}
